# -*- encoding: utf-8 -*-
'''
@File    :   4.py
@Time    :   2022/12/16 20:15:12
@Author  :   Cms 
@Version :   1.0
@Contact :   2267000140@qq.com
@WebSite    :   www.baidu.com
'''

# 4  编写装饰器来实现，对目标函数进行装饰,计算函数的运行耗时，
#     分3种情况：目标函数无参数无返回值，目标函数有参数，目标函数有返回值；
#      三个目标函数分别为：
#      A 打印输出20000之内的素数；
#      B 计算整数2-10000之间的素数的个数；
#      C 计算整数2-M之间的素数的个数；
#   可以观看给的视频材料，仿照示例来做；

# here put the import lib
import time

def isPrime(n):
    if n < 2:
        return False
    elif n == 2:
        return True
    else:
        for i in range(2,n):
            if n % i == 0:
                return False
        return True

def display_time1(func):
    def wrapper():
        t1 = time.time()
        func()
        t2 = time.time()
        print("运行时间为：{:.4} s".format(t2-t1))
    return wrapper

def display_time2(func):
    def wrapper():
        t1 = time.time()
        result = func()
        t2 = time.time()
        print("运行时间为：{:.4} s".format(t2-t1))
        return result
    return wrapper

def display_time3(func):
    def wrapper(*arg):
        t1 = time.time()
        result = func(*arg)
        t2 = time.time()
        print("运行时间为：{:.4} s".format(t2-t1))
        return result
    return wrapper

@display_time1
def printPrime():
    for i in range(2,20001):
        if isPrime(i):
            print(i)


@display_time2
def numPrime():
    count = 0
    for i in range(2,20001):
        if isPrime(i):
            count += 1
    return count

@display_time3
def numPrime2(n):
    count = 0
    for i in range(2,(n+1)):
        if isPrime(i):
            count += 1
    return count

printPrime()
print("整数2-10000之间的素数的个数:",numPrime())

n = 100
print("整数2-%s之间的素数的个数:"%n,numPrime2(n))

